package pojo;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.time.LocalDateTime;

/**
 * Department 实体类
 * 用于表示医院的科室信息，封装科室的基本属性，
 * 可与数据库中对应的科室表进行映射，也用于接口交互时的数据传输
 *
 * @ApiModel 注解标记当前类为 Swagger 的模型（Model），描述类的作用
 */
@ApiModel(value = "Department", description = "医院科室信息实体类")
public class Department {

    /**
     * 科室ID
     * 作为科室在系统中的唯一标识，一般由数据库自动生成或按规则分配，用于区分不同科室
     *
     * @ApiModelProperty 注解描述字段含义、示例和是否必填等
     * value: 字段说明
     * example: 示例值
     * required: 是否为必填字段（根据实际业务调整，这里只是示例）
     */
    @ApiModelProperty(value = "科室唯一标识ID", example = "1", required = false)
    private Integer departmentId;

    /**
     * 科室名称
     * 存储科室的具体名称，如“内科”“外科”“急诊科”等，方便用户识别和业务处理
     */
    @ApiModelProperty(value = "科室名称", example = "心血管内科", required = true)
    private String departmentName;

    /**
     * 科室层级
     * 用于标识科室的层级关系，比如一级科室（如“内科系统” ）、二级科室（如“心血管内科” ），
     * 通过层级可以构建科室的树形结构或区分不同级别的科室
     */
    @ApiModelProperty(value = "科室层级，1 表示一级科室，2 表示二级科室等", example = "2", required = true)
    private Integer level;

    /**
     * 父科室ID
     * 若当前科室是二级及以下科室，用于关联其父科室（一级科室）的 ID；
     * 若为一级科室，父 ID 可设为 0 或 null（根据业务规则）
     */
    @ApiModelProperty(value = "父科室ID，关联上级科室，一级科室可填 0", example = "1", required = false)
    private Integer parentId;

    /**
     * 创建时间
     * 记录科室信息在系统中的创建时间，用于数据追溯、排序等场景
     *
     * @JsonFormat 注解用于控制 JSON 序列化/反序列化时的日期格式
     * pattern: 日期格式化规则，允许单数字小时（如 9:05:00）
     */
    @JsonFormat(pattern = "yyyy-MM-dd H:mm:ss")
    @ApiModelProperty(
            value = "科室创建时间",
            example = "2025-06-19 9:30:00",
            notes = "日期格式：yyyy-MM-dd H:mm:ss，如 '2025-06-19 9:30:00'"
    )
    private LocalDateTime createTime;

    // ------------------- Getter & Setter -------------------

    public Integer getDepartmentId() {
        return departmentId;
    }

    public void setDepartmentId(Integer departmentId) {
        this.departmentId = departmentId;
    }

    public String getDepartmentName() {
        return departmentName;
    }

    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
    }

    public Integer getLevel() {
        return level;
    }

    public void setLevel(Integer level) {
        this.level = level;
    }

    public Integer getParentId() {
        return parentId;
    }

    public void setParentId(Integer parentId) {
        this.parentId = parentId;
    }

    public LocalDateTime getCreateTime() {
        return createTime;
    }

    public void setCreateTime(LocalDateTime createTime) {
        this.createTime = createTime;
    }
}